#include "process.h"

const char* str = "|/-\\";

void process_v1()
{
     //version 1
     int rate = 0;
     //char bar[SIZE] = {0};

     int length = strlen(str);
     
     char bar[SIZE];
     memset(bar,'\0',sizeof(bar));

     while(rate <= MAX_RATE)
     {
         printf("[%-100s][%d%%][%c]\r",bar,rate,str[rate%length]);
         fflush(stdout);//使用斜杠r就要刷新缓冲区         

         usleep(STIME);
         bar[rate++] = STYLE;
     }
     printf("\n");
}


//版本二希望可以依照给定的rate打印进度条而不是像版本一一样直接拉满
void process_v2(int rate)
{
     int length = strlen(str);
     
     // char bar[SIZE];
     // memset(bar,'\0',sizeof(bar));

     static char bar[SIZE] = { 0 };//注意上面的操作总是在main.c的一次循环结束就把数组清零，导致bar无法正常输出

     if(rate <= MAX_RATE && rate >= 0)
     {
         printf("[%-100s][%d%%][%c]\r",bar,rate,str[rate%length]);
         fflush(stdout);//使用斜杠r就要刷新缓冲区         

         bar[rate] = STYLE;
     }
     if(rate == MAX_RATE)
        memset(bar,'\0',sizeof(bar));
}

void process_v3(double rate)
{
     int length = strlen(str);
     
     // char bar[SIZE];
     // memset(bar,'\0',sizeof(bar));

     static char bar[SIZE] = { 0 };//注意上面的操作总是在main.c的一次循环结束就把数组清零，导致bar无法正常输出
     static int cnt = 0;

     if(rate <= MAX_RATE && rate >= 0)
     {
         cnt++;
         cnt = (cnt >= length ? 0 : cnt);

         printf("加载中…[%-100s][%.1f%%][%c]\r",bar,rate,str[cnt]);
         fflush(stdout);//使用斜杠r就要刷新缓冲区         
         if(rate < MAX_RATE)
         {
            bar[(int)rate] = STYLE_BODY;
            bar[(int)rate+1] = STYLE_HEADER;
         }
         else
         { 
            bar[(int)rate] = STYLE_BODY;
         }
     }
     //if(rate == MAX_RATE)
}
